% Modern Robotics Descriptions for all Interbotix Arms.
% 
% Note: 
%     The end-effector is positioned at `<robot_name>/ee_gripper_link` and 
%     the Space frame is positioned at `<robot_name>/base_link`.
%

classdef mr_descriptions
    properties (Constant)
        px100 = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,    0.0, 0.0]
                      [0.0, 1.0, 0.0, -0.0931, 0.0, 0.0]
                      [0.0, 1.0, 0.0, -0.1931, 0.0, 0.035]
                      [0.0, 1.0, 0.0, -0.1931, 0.0, 0.135]]',...
             ...
             'M',    [[1.0, 0.0, 0.0, 0.248575]
                      [0.0, 1.0, 0.0, 0.0]
                      [0.0, 0.0, 1.0, 0.1931]
                      [0.0, 0.0, 0.0, 1.0]])

        px150 = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,     0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.10457, 0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.25457, 0.0,     0.05]
                      [0.0, 1.0, 0.0, -0.25457, 0.0,     0.2]
                      [1.0, 0.0, 0.0,  0.0,     0.25457, 0.0]]',...
            ...
            'M',     [[1.0, 0.0, 0.0, 0.358575]
                      [0.0, 1.0, 0.0, 0.0]
                      [0.0, 0.0, 1.0, 0.25457]
                      [0.0, 0.0, 0.0, 1.0]])

        rx150 = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,     0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.10457, 0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.25457, 0.0,     0.05]
                      [0.0, 1.0, 0.0, -0.25457, 0.0,     0.2]
                      [1.0, 0.0, 0.0,  0.0,     0.25457, 0.0]]',...
            ...
            'M',     [[1.0, 0.0, 0.0, 0.358575]
                      [0.0, 1.0, 0.0, 0.0]
                      [0.0, 0.0, 1.0, 0.25457]
                      [0.0, 0.0, 0.0, 1.0]])

        rx200 = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,     0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.10457, 0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.30457, 0.0,     0.05]
                      [0.0, 1.0, 0.0, -0.30457, 0.0,     0.25]
                      [1.0, 0.0, 0.0,  0.0,     0.30457, 0.0]]',...
            ...
            'M', [[1.0, 0.0, 0.0, 0.408575]
                  [0.0, 1.0, 0.0, 0.0]
                  [0.0, 0.0, 1.0, 0.30457]
                  [0.0, 0.0, 0.0, 1.0]])
        
        vx250 = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,     0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.12705, 0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.37705, 0.0,     0.06]
                      [0.0, 1.0, 0.0, -0.37705, 0.0,     0.31]
                      [1.0, 0.0, 0.0,  0.0,     0.37705, 0.0]]',...
            ...
            'M', [[1.0, 0.0, 0.0, 0.468575]
                  [0.0, 1.0, 0.0, 0.0]
                  [0.0, 0.0, 1.0, 0.37705]
                  [0.0, 0.0, 0.0, 1.0]])

         vx300 = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,     0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.12705, 0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.42705, 0.0,     0.05955]
                      [0.0, 1.0, 0.0, -0.42705, 0.0,     0.35955]
                      [1.0, 0.0, 0.0,  0.0,     0.42705, 0.0]]',...
            ...
            'M', [[1.0, 0.0, 0.0, 0.536494]
                  [0.0, 1.0, 0.0, 0.0]
                  [0.0, 0.0, 1.0, 0.42705]
                  [0.0, 0.0, 0.0, 1.0]])

         vx300s = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,     0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.12705, 0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.42705, 0.0,     0.05955]
                      [1.0, 0.0, 0.0,  0.0,     0.42705, 0.0]
                      [0.0, 1.0, 0.0, -0.42705, 0.0,     0.35955]
                      [1.0, 0.0, 0.0,  0.0,     0.42705, 0.0]]',...
            ...
            'M', [[1.0, 0.0, 0.0, 0.536494]
                  [0.0, 1.0, 0.0, 0.0]
                  [0.0, 0.0, 1.0, 0.42705]
                  [0.0, 0.0, 0.0, 1.0]])

         wx200 = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,     0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.11065, 0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.31065, 0.0,     0.05]
                      [0.0, 1.0, 0.0, -0.31065, 0.0,     0.25]
                      [1.0, 0.0, 0.0,  0.0,     0.31065, 0.0]]',...
            ...
            'M', [[1.0, 0.0, 0.0, 0.408575]
                  [0.0, 1.0, 0.0, 0.0]
                  [0.0, 0.0, 1.0, 0.31065]
                  [0.0, 0.0, 0.0, 1.0]])


         wx250 = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,     0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.11065, 0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.36065, 0.0,     0.04975]
                      [0.0, 1.0, 0.0, -0.36065, 0.0,     0.29975]
                      [1.0, 0.0, 0.0,  0.0,     0.36065, 0.0]]',...
            ...
            'M', [[1.0, 0.0, 0.0, 0.458325]
                  [0.0, 1.0, 0.0, 0.0]
                  [0.0, 0.0, 1.0, 0.36065]
                  [0.0, 0.0, 0.0, 1.0]])

         wx250s = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,     0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.11065, 0.0,     0.0]
                      [0.0, 1.0, 0.0, -0.36065, 0.0,     0.04975]
                      [1.0, 0.0, 0.0,  0.0,     0.36065, 0.0]
                      [0.0, 1.0, 0.0, -0.36065, 0.0,     0.29975]
                      [1.0, 0.0, 0.0,  0.0,     0.36065, 0.0]]',...
            ...
            'M', [[1.0, 0.0, 0.0, 0.458325]
                  [0.0, 1.0, 0.0, 0.0]
                  [0.0, 0.0, 1.0, 0.36065]
                  [0.0, 0.0, 0.0, 1.0]])

         mobile_px100 = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,     0.0, 0.0]
                      [0.0, 1.0, 0.0, -0.08518, 0.0, 0.0]
                      [0.0, 1.0, 0.0, -0.18518, 0.0, 0.035]
                      [0.0, 1.0, 0.0, -0.18518, 0.0, 0.135]]',...
            ...
            'M', [[1.0, 0.0, 0.0, 0.248575]
                  [0.0, 1.0, 0.0, 0.0]
                  [0.0, 0.0, 1.0, 0.18518]
                  [0.0, 0.0, 0.0, 1.0]])


         mobile_wx200 = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,      0.0,      0.0]
                      [0.0, 1.0, 0.0, -0.104825, 0.0,      0.0]
                      [0.0, 1.0, 0.0, -0.304825, 0.0,      0.05]
                      [0.0, 1.0, 0.0, -0.304825, 0.0,      0.25]
                      [1.0, 0.0, 0.0,  0.0,      0.304825, 0.0]]',...
            ...
            'M', [[1.0, 0.0, 0.0, 0.408575]
                  [0.0, 1.0, 0.0, 0.0]
                  [0.0, 0.0, 1.0, 0.304825]
                  [0.0, 0.0, 0.0, 1.0]])

         mobile_wx250s = struct(...
            'Slist', [[0.0, 0.0, 1.0,  0.0,      0.0,      0.0]
                      [0.0, 1.0, 0.0, -0.104825, 0.0,      0.0]
                      [0.0, 1.0, 0.0, -0.354825, 0.0,      0.04975]
                      [1.0, 0.0, 0.0,  0.0,      0.354825, 0.0]
                      [0.0, 1.0, 0.0, -0.354825, 0.0,      0.29975]
                      [1.0, 0.0, 0.0,  0.0,      0.354825, 0.0]]',...
            ...
            'M', [[1.0, 0.0, 0.0, 0.458325]
                  [0.0, 1.0, 0.0, 0.0]
                  [0.0, 0.0, 1.0, 0.354825]
                  [0.0, 0.0, 0.0, 1.0]])
    end
end
